iT邦幫忙

2021 iThome 鐵人賽

DAY 17
0

Fargate吃不到

ECS Fargate是一個Serverless的服務,Serverless顧名思義就是無伺服器,不用花時間去管理EC2,由AWS去分配Fargate的資源並維護host,相比之下,ECS則可以連進EC2 host做參數設定,以及docker exec進到container debug。主要還是取決應用場景。

運作原理

Fargate也是會由Cluster、Service和Task三者組成服務。

ECS EC2 mode與Fargate mode在CDK上,會有很多相似之處,主要差別會在於,EC2以及EBS上的設定,而Fargate mode就不需要做EC2 & EBS的設定。此篇,subnet的設定會以Day15的方式去建置

VPC設定,由自己去設定public subnet,這邊不會用到private subnet,所以將NAT參數設成0

vpc = ec2.Vpc(self, "VPC", 
        cidr="10.0.0.0/16",
        enable_dns_hostnames=True,
        enable_dns_support=True,
        max_azs=0,
        nat_gateways=0)

Public Subnet設定,參數如同前面章節一樣

public_subnet = ec2.Subnet(self, "public-subnet1", 
        availability_zone="us-east-2a",
        cidr_block="10.0.10.0/24",
        vpc_id=vpc.vpc_id,
        map_public_ip_on_launch=True)
        public_subnet.add_default_internet_route(gateway_id=vpc.internet_gateway_id, gateway_attachment=vpc)

增加Security Group的設定,但只允許HTTP protocol對外,因為Fargate把Host封裝起來,我們是無法訪問,所以就無需增加SSH rules

sg = ec2.SecurityGroup(self, "CDK-SG", 
        vpc=vpc,
        description="cdk create security group",
        security_group_name="cdkSG")

sg.add_ingress_rule(peer=ec2.Peer.any_ipv4(), connection=ec2.Port.tcp(80), description="cdk allow anywhere about HTTP protocol")

Cluster選擇Fargate的形式

cluster = ecs.Cluster(self, "Fargate-Cluster",
        enable_fargate_capacity_providers=True,
        vpc=vpc)

定義Fargate Task,在設定CPU和Memory的時候,Memory必須為2倍的CPU。在設計應用程式的時候,也需要給予足夠多的Memory,因為應用程式在執行的時候,若Memory不足很容易造成,程式崩潰。

task = ecs.FargateTaskDefinition(self, "fargate-task", 
        cpu=1024,
        memory_limit_mib=2048,
        )

將Task加入Container

task.add_container(id="app",
        image=ecs.ContainerImage.from_registry("johnson860312/awswebdb"),
        container_name="mycontainer",
        port_mappings=[
            ecs.PortMapping(container_port=80,
            host_port=80,
            protocol=ecs.Protocol.TCP)
        ],
        cpu=128,
        memory_reservation_mib=256
        )

最後再由Service去做Task的執行使用,設定Public IP以及在哪個Subnet上

svc = ecs.FargateService(self, "fargate-svc",
            task_definition=task,
            cluster=cluster,
            security_groups=[sg],
            assign_public_ip=True,
            vpc_subnets=ec2.SubnetSelection(
                subnets=[public_subnet, public_subnet2]
            ),
            desired_count=3
        )

結果

https://ithelp.ithome.com.tw/upload/images/20211001/20140172ICafb54wmi.png
https://ithelp.ithome.com.tw/upload/images/20211001/20140172RHkWIkeeCu.png

結論

上述的做法就可以快速建立Fargate,並將想要應用程式執行在Container,並在browser上訪問


上一篇
躲開Windows地雷使用AWS的Docker讓你上天堂
下一篇
當火災發生時,勢必要分流人群,讓各個出口可以有效運用,讓人群疏散
系列文
從煉獄走到天堂的AWS DevOps 工具及應用開發大進擊30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言